
--限流对象
local key=KEYS[1]
--窗口大小
local window = tonumber(ARGV[1])
--阈值
local threshold = tonumber(ARGV[2])
-- 当前时间戳
local now = tonumber(ARGV[3])

--窗口的起始时间
local min = now - window

-- 删除不在窗口的
redis.call('ZREMRANGEBYSORE',key,'-inf',min)

local cnt = redis.call('ZCOUNT',key,min,'+inf')

if cnt >= threshold then
    --执行限流
    return "true"
else
   redis.call('ZADD',key,now,now)
  -- PEXPIRE 限流时间
   redis.call('PEXPIRE',key,window)
  -- 不用限流
   return "false"
end
